{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import numpy.linalg as npl\n",
    "import scipy.linalg as spl\n",
    "import sklearn.metrics as sklm\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd #for debugging\n",
    "plt.rcParams['figure.figsize'] = [8, 8]\n",
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 17.1 Portfolio Optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"**Compounded portfolio value.** The cumulative value of a portfolio from a return time series vector r, starting from the traditional value of $10,000, is given by the value time series vector v, where\n",
    "\n",
    "$$v_{t} = 10000(1+r_{1}) ... (1+r_{t-1}),\\:t=1,...,T.$$\n",
    "\n",
    "In other words, we form the *cumulative product* of the vector with entries $1+r_t$. Julia* has a built-in function that does this, **cumprod**.\"\n",
    "\n",
    "*NumPy uses np.cumprod"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Portfolio value with re-investment, return time series r\n",
    "cum_value = lambda r: 1000*np.cumprod(1 + r)\n",
    "T = 250 #Days in a trading year\n",
    "#Generate random returns sequence with annualized return, risk: 10%,5%\n",
    "mu,sigma = .10/T, .05/np.sqrt(T)\n",
    "r = mu + sigma * np.random.randn(T)\n",
    "v = cum_value(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1131.7892031880638, 1118.2785638887856)"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x127993240>]"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 't')"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'v_t')"
      ]
     },
     "execution_count": 182,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "v[T-1], v[0]*(1+sum(r))\n",
    "plt.plot(range(T),v)\n",
    "plt.xlabel(\"t\")\n",
    "plt.ylabel(\"v_t\")\n",
    "#The resulting figure for some choice of r:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"**Portfolio optimization.** We define a function port_opt that evaluates the solution (17.3) of the constrained least squares problem (17.2) in VMLS, and apply to the return data in VMLS Section 17.1.3.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {},
   "outputs": [],
   "source": [
    "def port_opt(R,rho):\n",
    "    T,n = np.shape(R)\n",
    "    mu = np.vstack(np.sum(R, axis=0))/T\n",
    "    a = np.hstack([2*np.matmul(R.T,R), np.ones((n,1)),mu])\n",
    "    b = np.hstack([np.ones(n), 0, 0])\n",
    "    c = np.block([mu.T,0,0])\n",
    "    KKT = np.vstack([a,b,c])\n",
    "    wz1z2 = npl.lstsq(KKT,np.vstack([2*rho*T*mu, 1, rho]))[0]\n",
    "    w = wz1z2[:n]\n",
    "    return w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((2000, 20), (500, 20))"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "R,Rtest = np.loadtxt('R.txt'), np.loadtxt('Rtest.txt')\n",
    "np.shape(R), np.shape(Rtest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:8: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "('risk and return:', 0.08650183086854815, 0.10000000000000195)"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x127e1de10>]"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x127da24a8>]"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x127af93c8>]"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x127af9710>]"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x127e0f828>"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfYAAAHVCAYAAAAD09kkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl8VNX9//HXSTJJIOyrYFBAKCCgsihYFVGKC1VxRalVrFvd69a6tFatS9XWulS7WPUrrrj1p2gFVBSrFRAEBQUVZA2LQAhLyDaZOb8/Zu7NTGaykEzmZibv5+Phg3vPPTP5TGj5zNmNtRYRERFJDxleByAiIiKJo8QuIiKSRpTYRURE0ogSu4iISBpRYhcREUkjSuwiIiJpRIldREQkjSixi4iIpBEldhERkTSS5XUADdWlSxfbu3dvr8MQERFJis8//3ybtbZrXfVSNrH37t2bhQsXeh2GiIhIUhhj1tannrriRURE0ogSu4iISBpRYhcREUkjKTvGHo/f76egoICysjKvQ2kyubm55Ofn4/P5vA5FRESaobRK7AUFBbRt25bevXtjjPE6nISz1lJYWEhBQQF9+vTxOhwREWmG0qorvqysjM6dO6dlUgcwxtC5c+e07pEQEZHGSavEDqRtUnek++cTEZHGSbvELiIi0pIpsSfYhRdeSLdu3RgyZIhbtn37dsaPH0///v0ZP348RUVFALz++usMHjyYo446isLCQgC+//57zjnnHE9iFxGR1KfEnmAXXHABM2fOjCq77777GDduHCtWrGDcuHHcd999ADz44IPMmzeP888/nxdffBGA3/3ud9x1111Jj1tERNJDWs2Kj3TnW1+zbOOuhL7ngT3bcfvJg2utM2bMGNasWRNV9uabbzJnzhwApkyZwtixY7n//vvJyMigvLyckpIScnJy+Pjjj+nRowf9+/dPaNwiItJypG1ib05++OEHevToAUCPHj3YsmULALfffjvHH388PXv25Pnnn2fSpElMmzbNy1BFRCTFpW1ir6tl3RyMHz+e8ePHAzB16lQmTJjAt99+y5///Gc6duzII488QuvWrT2OUkREUonG2JOge/fubNq0CYBNmzbRrVu3qOclJSVMnTqVK664gltuuYWnn36aESNG8MILL3gRroiIpDAl9iQ45ZRTmDp1KhBq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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rho = .1/T #T from above for number of trading days, .1 for 10% annual return\n",
    "w = port_opt(R,rho)\n",
    "r = np.matmul(R,w) #portfolio return time series! \n",
    "pf_return = T*np.average(r)\n",
    "pf_risk = np.sqrt(T)*np.std(r)\n",
    "\"risk and return:\", pf_risk, pf_return\n",
    "#Additional plots for .2,.4,1/n\n",
    "plt.plot(range(np.shape(R)[0]),cum_value(r))\n",
    "rho = .2/T \n",
    "w = port_opt(R,rho)\n",
    "r = np.matmul(R,w)\n",
    "plt.plot(range(np.shape(R)[0]),cum_value(r))\n",
    "rho = .4/T \n",
    "w = port_opt(R,rho)\n",
    "r = np.matmul(R,w) \n",
    "plt.plot(range(np.shape(R)[0]),cum_value(r))\n",
    "rho = (1/np.shape(R)[1])/T \n",
    "w = port_opt(R,rho)\n",
    "r = np.matmul(R,w) \n",
    "plt.plot(range(np.shape(R)[0]),cum_value(r))\n",
    "plt.legend([\"10%\",\"20%\",\"40%\",\"1/n\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 17.2 Linear Quadratic Control"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"We implement linear quadratic control, as described in VMLS 17.2, for a time-invariant system with matrices A, B, and C.\n",
    "\n",
    "**Kronecker product.** To create the big matrices $\\tilde{A}$  and $\\tilde{C}$, we need to define block diagonal matrices with the same matrix repeated a number of times along the diagonal. There are many ways to do this in Julia*. One of the simplest ways uses the kron function, for the Kronecker product of two matrices. The kronecker prodcut of an m x n matrix G and a p x q matrix H is defined as the mp x nq block matrix\n",
    "\n",
    "$$\\begin{bmatrix}\n",
    "    G_{11}H & G_{12}H & \\dots & G_{1n}H  \\\\\n",
    "    G_{21}H & G_{22}H & \\dots & G_{2n}H \\\\\n",
    "    \\vdots & \\vdots &   & \\vdots \\\\\n",
    "    G_{m1}H & G_{m2}H & \\dots & G_{mn}H\n",
    "\\end{bmatrix}$$\n",
    "\n",
    "It is computed in Julia as kron(G,H). If G is an n x n identity matrix, we obtain the block diagonal matrix with H repeated n times on the diagonal.\n",
    "\" \n",
    " \n",
    "*Numpy: np.kron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(6, 6)"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "array([[ 0.71495812, -1.32655578,  0.        , -0.        ,  0.        ,\n",
       "        -0.        ],\n",
       "       [ 0.04986114,  1.03592187,  0.        ,  0.        ,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.        , -0.        ,  0.71495812, -1.32655578,  0.        ,\n",
       "        -0.        ],\n",
       "       [ 0.        ,  0.        ,  0.04986114,  1.03592187,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.        , -0.        ,  0.        , -0.        ,  0.71495812,\n",
       "        -1.32655578],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.04986114,\n",
       "         1.03592187]])"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H = np.random.randn(2,2)\n",
    "np.shape(np.kron(np.eye(3),H))\n",
    "np.kron(np.eye(3),H)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"An alternative method uses the Julia* cat function for constructing block matrices.\"\n",
    "\n",
    "*SciPy LinAlg: spl.block_diag"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.71495812, -1.32655578,  0.        ,  0.        ,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.04986114,  1.03592187,  0.        ,  0.        ,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.        ,  0.        ,  0.71495812, -1.32655578,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.        ,  0.        ,  0.04986114,  1.03592187,  0.        ,\n",
       "         0.        ],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.71495812,\n",
       "        -1.32655578],\n",
       "       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.04986114,\n",
       "         1.03592187]])"
      ]
     },
     "execution_count": 243,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#J: cat([H for k = 1:3]..., dims(1,2))\n",
    "spl.block_diag(*[H for k in range(3)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"**Linear quadratic control example.** We start by writing a function lqr that constructs and solves the constrainted least squares problem for linear quadratic control. The function returns three arrays:\n",
    "\n",
    "```python\n",
    "x = [x[1],x[2],...,x[T] ],\n",
    "u = [u[1],u[2],...,u[T-1] ],\n",
    "y = [y[1],y[2],...,y[T] ]\n",
    "```\n",
    "\n",
    "The first two contain the optimal solution of the problem. The third array contains $y_{t} = Cx_{t}$.\n",
    "\n",
    "We allow the input arguments ```x_init``` and ```x_des``` to be matrices, so we can solve the same problem for different pairs of initial and end states, with one function call. If the number of columns in ```x_init``` and ```x_des``` is $q$, then the entries of the three output sequences ```x,u,y``` are matrices with $q$ columns. The $i$ th columns are the solution for the initial and end states specified in the $i$th columns of ```x_init``` and ```x_des```.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 581,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.855,  1.161,  0.667],\n",
       "       [ 0.015,  1.073,  0.053],\n",
       "       [-0.084,  0.059,  1.022]])"
      ]
     },
     "execution_count": 581,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "array([[-0.076],\n",
       "       [-0.139],\n",
       "       [ 0.342]])"
      ]
     },
     "execution_count": 581,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "array([[ 0.218, -3.597, -1.683]])"
      ]
     },
     "execution_count": 581,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "array([[ 0.496],\n",
       "       [-0.745],\n",
       "       [ 1.394]])"
      ]
     },
     "execution_count": 581,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#\"We apply the fucntion the example in 17.2.21.\"\n",
    "A = np.array([[ 0.855,  1.161,  0.667],\n",
    "       [ 0.015,  1.073,  0.053],\n",
    "       [-0.084,  0.059,  1.022]])\n",
    "B = np.vstack([-0.076, -.139 ,  0.342])\n",
    "C = np.vstack([[ 0.218, -3.597, -1.683]])\n",
    "x_init = np.vstack([ 0.496, -0.745,  1.394])\n",
    "A\n",
    "B\n",
    "C\n",
    "x_init\n",
    "m,n,p = 1,3,1\n",
    "x_des = np.zeros((n,1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"We first plot the open-loop response of VMLS figure 17.4 in figure 17.3.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 582,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12bb44390>]"
      ]
     },
     "execution_count": 582,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Figure 17.3 Open-loop response $CA^{t-1}x^{init}$')"
      ]
     },
     "execution_count": 582,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "T = 100\n",
    "yol = np.zeros((T,1))\n",
    "Xol = np.hstack([x_init,np.zeros((n,T-1))])\n",
    "for k in range(T-1):\n",
    "    Xol[:,k+1] = np.matmul(A,Xol[:,k])\n",
    "yol = np.matmul(C,Xol)\n",
    "plt.plot(range(T),yol.T)\n",
    "plt.title(\"Figure 17.3 Open-loop response $CA^{t-1}x^{init}$\", fontsize=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\"We then solve thel ienar quadratic control problem with $T$ = 100 and $p$=0.2. The result is shown in the second row of VMLS figure 177.6 and in figure 17.4 [here].\" "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 634,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cls_solve(A,b,C,d):\n",
    "    m,n = np.shape(A)\n",
    "    p,n = np.shape(C)\n",
    "    Q,R = npl.qr(np.vstack([A,C]))\n",
    "    Q1 = Q[0:m,:]\n",
    "    Q2 = Q[m:m+p,:]\n",
    "    Qtil, Rtil = npl.qr(Q2.T)\n",
    "    first = np.vstack(np.matmul(np.matmul(2*Qtil.T , Q1.T),b)) #splitting line below for readability\n",
    "    denom = first - np.vstack((2*(npl.lstsq(Rtil.T,d)[0]))) #splitting line below for readability\n",
    "    w = npl.lstsq(Rtil, denom)[0]\n",
    "    return npl.lstsq(R,np.vstack(np.matmul(Q1.T,b)) - np.matmul(Q2.T , w)/2)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 694,
   "metadata": {},
   "outputs": [],
   "source": [
    "rho = .2\n",
    "def lqr(A,B,C, x_init, x_des, T, rho):\n",
    "    n = np.shape(A)[0]\n",
    "    m = np.shape(B)[1]\n",
    "    p = np.shape(C)[0]\n",
    "    q = np.shape(x_init)[1]\n",
    "    Atil = np.vstack([np.hstack([np.kron(np.eye(T),C), np.zeros((p*T,m*(T-1)))]),np.hstack([np.zeros((m*(T-1),n*T)), np.sqrt(rho)*np.eye(m*(T-1))])])\n",
    "    btil = np.zeros((p*T + m *(T-1),q))\n",
    "    Ctil11 = np.hstack([np.kron(np.eye(T-1),A), np.zeros((n*(T-1),n))]) - np.hstack([np.zeros(((n*(T-1),n))), np.eye(n*(T-1))])\n",
    "    Ctil12 = np.kron(np.eye(T-1), B)\n",
    "    Ctil21 = np.vstack([np.hstack([np.eye(n),np.zeros((n,n*(T-1)))]),np.hstack([np.zeros((n,n*(T-1))),np.eye(n)])])\n",
    "    Ctil22 = np.zeros(((2*n),m*(T-1)))\n",
    "    Ctil = np.vstack([np.hstack([Ctil11, Ctil12]),np.hstack([Ctil21, Ctil22])])\n",
    "    dtil = np.vstack([np.zeros(((n*(T-1), q))), x_init, x_des])\n",
    "    z = cls_solve(Atil, btil, Ctil, dtil)\n",
    "    xpre = np.vstack([np.hstack(z[(i-1)*n : i*n,:]) for i in range(1,T+1)])\n",
    "    x = [np.reshape(xp,(n,q)) for xp in xpre]\n",
    "    u = np.vstack([np.hstack(z[n*T+(i)*m : n*T+i+1*m, :]) for i in range(0,T-1)])\n",
    "    y = np.vstack([np.matmul(C,xt) for xt in x])\n",
    "    return x,u,y,z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 695,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  if __name__ == '__main__':\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:11: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # This is added back by InteractiveShellApp.init_path()\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.7738942551160166"
      ]
     },
     "execution_count": 695,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "3.7829986463323855"
      ]
     },
     "execution_count": 695,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x,u,y,z= lqr(A,B,C,x_init,x_des,T,rho)\n",
    "J_in = npl.norm(u)**2\n",
    "J_out = npl.norm(y)**2\n",
    "J_in\n",
    "J_out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 696,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12d589438>]"
      ]
     },
     "execution_count": 696,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12d5574a8>]"
      ]
     },
     "execution_count": 696,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 't')"
      ]
     },
     "execution_count": 696,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12d589cc0>"
      ]
     },
     "execution_count": 696,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Figure 17.4 Optimal input and output for $p = 0.2$')"
      ]
     },
     "execution_count": 696,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAH0CAYAAAAUmKWVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd0HNXZx/HvVbdVXCS5SrYkd+Pee8OAMQm9JvTeAqEkIZ2E5AVCJ0DA9Bp6x0AoLhj3BsYVW25ylbstW/2+f9wVluWVrLLSaLW/zzlzVjs7O/PsaHefvXduMdZaREREJHiEeR2AiIiIVI2St4iISJBR8hYREQkySt4iIiJBRslbREQkyCh5i4iIBBklbxERkSCj5C0iIhJklLzLYYy51Bhjy1nG+7a50xgTdKPcGGNSjDH/NsbMMsYc9L2mND/bTa3gHHxWxWN+5nveP6r4vBONMZ8aY3YaY3KNMauMMfcaY5pVZT+l9ne6MebWch7z5P9ZmePWp/daRefQK7736tQ6PmadnYeqHssYc7kx5kdjTL4xZk9txuYVY0yqMeZtY8xeY8w+Y8y7xph2lXje2caYd4wx640xh4wxK40xdxtj4usi7kBR8j62c4ChZZa5vsee8d0PNh2Bc4HdwDcVbHc9R7/2ki+QDyt7MGPMBUDvqgZpjPkD8DmQC1wJnAQ8CVwKzDPGpFZ1n8DpHH4NZdXn/2d9iq2icxhK6vI8VPpYxpg2wCRgJjAOGF+LcXnCGNMY+BroClwCXAR0AqYYY2KP8fTbgSLgD8AE4D/AdcAXxpigyYkRXgcQBBZba1f7e8BamwVk1WUwxphoa21eDXcz3Vrb0re/K4ET/W1krV3m5/hXAfnA65U5kDGmKfAQcAvwWmUDNMaMBf4BPGytvaXUQ9OMMe8BC4CXgLGV3eexePH/rKz6HJvUO52AcOBFa+2MQOwwQN87gXQVkAF0Kfl+NsZ8D/wIXAM8WMFzf26tzS51f5oxZhfwIjAG96Og/rPWavGz4Ep3FuhYwTZ3ulN4xLoLgBW40uIS4FRgKjC11DYvAOv87K/sdnf6YuiBK4EeAD4o9XhvXAl4N3AI+BYYWcXXeaXvGGmV2LYRsA94uwr7nwR85fvbAv+o5PM+BXYAMeU8/lvf/gaXOVc9gSnAQWAL8HcgrNR5t2WWdaX2ecT/s9Q+u/rOfw6wAbjM9/hFvv/1Ad8xO5SJsSPwMrDW9//JxP3Kb3as91El32sl8XUCPvHFsR74S8lrruy5qez78ljn0M9zq3QOjvVafNue7zvvecBS4AzKfHYqiGcCMMsXy17gfVwCIJDnwatzXs62L1Tx9ZfE7vd7x88x5wJv+l7bGtx33/fA8ZX9nqjqAnwFfOtn/TRgWjX21833mi+qrZgDvQRNFYGHwo0xEaWW8PI2NMacALyK+2I5C7gfeBjoXMMYPsC9KU/FlWIxxvTDVYs1x/0KPQvYCXxpjOlfw+OV50wgHvcL9ZiMMSOAi3HV75VmjIkARgNfWGtzy9mspNp+XJn17wNf4qoZXwP+jEsAAHcBk4FsDl8GOKMSIb2FSyin40r8zxlj/g9X1XYHcBnQhaNrFtrgSsu/xlX5/x043hdDIL2HKy2cjnv9f8NVJZZV0bmprKqew6qegwpfi6+9yWu4EtaZwH3AI7jzXyFjzAQO/zA4D/f/6wHMMMa0Pdbzy6jseajrc34XcJPv7xt8294F1Xr9R33vlOX7rPYETgFG4GrYLsDV6r5rjEkq53mmzPdqeUt537fHAT/4Wb8U6F7Ocyoy2ne7vBrP9YbXvx7q68LhknfZZUapbe7kyJLaTNwbypRa18/3vKml1r1A1UreN/vZ9ivcGy2q1Lpw37r3q/A6q1Ly/hzYBkRUYttI3AfpH6XWVarkDbT0bXt3BdvE+LZ5osy5uqPMdk8D+4Gmpc59Vjn7LPv/LNnnxaXWNQMKcT+UEkqtv8m3bfsKYo7AfcFZoG95x61MbGXiu6zM+iXA//xsV5lzU5n3ZbnnsBL/2wrPQSVey7fAMo4svQ6mzGesnGPPxyX9iFLr0oEC4MEyr69G58HLc467xm2BMdV8/SWxH/W94+dYvXzbTgPCS60f7Vt/RjnPG4P/79eyi9//Ke7S3T1+1v8DKKzie7ItsB1XWKjye9qrRSXvYzsDGFhqucLfRr5fiAOAd6zvHQFgrV2IqzKsiffKHKsR7sPxFlBc8isVMLhf+aNqeLyj+BrBjAdetdYWVuIpv8NVs/+zOoerxnNKvFnm/utAHK6EUV2flvxhrd2N+6DPttbuK7XNCt/tT43ojDFRxpg/GGNWGGMO4b4kSxoIHrOkWAWflLn/A+Cv1W1tnJsKVeMclPtafJ+xgbjLNsUlG1hr5wDrjhFHLO6H9Bul37/W2rW4HwSjy3tuDdX5Ofenmq//PT/ryiqp5fuDtbao1PqSz0NiOc9bwJHfq+Ut11RwbOtnXZW+O4wxcbgahkJcDVrQUIO1Y/vBltNgrYwkXGlzu5/HttUwhi1l7jfHlbL/7FuOYowJK/0FFwAX4nonHLPK3Ndd44+4Un20MSa61MPRvkZs+8t82Evbgbsml1bBYUoe21hmfdlzXXK/qtWipe0ucz+/nHXgagRK3A38CldVPBNX4koB3i2zXU3tKnM/r5z918a5OZaqnoOKXkvJZ8zf5+lYn7FmuC/2sp8lgK1A+2M8v7q8OOf+VOf1+9u2rH7AZmvtt2XWt/HdltfI8gCwuBL795egwX3+mvtZ34yjP5t+GWNicJffMoDR1jUKDRpK3oGzA1eqaOHnsZa4hk4lcoEoP9sl4qpjyyr7Bt4DFAOP41pcH/2EwCZucNeuv7PWfleJbTNwX7iv+Hnsdt/Sl3I+vNbaQmPMdOAEY0yM9X/d+1TfbdmWoS1xjaJK3wfYVIm4A+184CVr7U99232/9L1yrHNT1fdlZQTyHJR8xlr6eawlroFbeXbjPket/DzWiiNfXyDPgxfn3J+qvP4S5SXO0vrh/7N1Hq6RXnldUUfjGvIdyzRcFXtZS3HXvcvqjrusUiFjTCTwDjAIGG+tXVKJWOoVVZsHiK8UOR84yxjzU9WNr/FYepnN1wMtSzfmMMZ0oJJVqdbaHNyHojew0Fo7v+xSw5dzBGPMANwHpVIN1XBJeayfBVxCHwscqzbjPtwX2P/5iScdVy0/3VdlWtq5Ze6fj/uVX9K4JQ9XnV8XGuOSTWleVs0d69xU9n1ZlXMYsHPg+4zNA84u3R/XGDOYimtpSj4zC4BzSjeCMsa0B4bhkkSJQJ4HL875Uar4+ivF9z/oDbT3XbYrWd8G10j1Md9x/alptfmHwBBjTEap46YBwznGGBS+uF/FNZw8zVo7u6Lt6yuVvAPrr8D/gPeMMZNw1Xx34qqlSpeE38K1AH3VGPOgb7vf40oWlXUrMB343BjzLK6KKwn3SzjcWntHRU82xpzt+7PkmtXJxphsINtaW/aDfDHumpDfftrGmNG4BnSXW2tfstbuwTW4KbsdwHpr7VGPlWWt/coY8xfg774P5Uu40kM/XAvvvbiuWmVd5ftwzsO1br4SuNMXE7hf5c2NMdfhfmzl1uKv7s+AS4wxS3A/Vs7EfVF65VjnprLvy6qcw0Cfg5LP2PvGmKeAZFyL9K2VeO6fcdfUPzbGPIG79vw33HvpgVLbBfI8eHHOa/r6K6srEIu71PGCMeZ53CWRv+Cuef+1vCdaa/fjXkd1PQ3cCHxgjPkTrpbgLtxltKdKNir73eRb/Thu8K1/AjnGmCGl9psVNNXnXreYq68L1e/n/QtgJUf2QV0EvFdmu9Nxv74PAd/hBkqZiv/W5n5bd+P6Jr6Ou86eh7u+9CEwsRKvr1KtO3HXGLOBjyrY1xjfcy+txDEr1c+71HMm4Fq57/a9xh9xpfLm/v4XuIZAU3zndSvuA126ZXIs8F8OVyOuK+//Wd75xzWOeqWcczC+1Lok3/9nt295FVeaOOJc+XsfVfK9Vl58L/h7Xcc6N1V4X5Z7Dv3EXaVzcKzX4lt3AUd/xo6I8Rjvp9L9nD+gTD/nQJwHj8+539bmlX395f0v/OzrwlKv8WNcNfk24N9AfFU+59VZcA0Z38GNPbEf1y0vrZzPZen32jrK//67s7bjDtRifC9GaokxJgVX4vintfYur+NpqIwxd+J+6UfayrWGDxk6N3UvFM65MeYh4GxrbXWGKZYaUrV5APm6cD2I6661A9dw67e4X6TPeBiaiEig9cNduxYPKHkHVhGu5eZjuMZWJQ3LzrHWVqbbhYhIvedrlNsHN4qkeEDV5iIiIkFGXcVERESCjJK3iIhIkKm317yTkpJsWlqa12GIiIjUmQULFuyw1iYfa7t6m7zT0tKYPz+gA4WJiIjUa8aYiob5/YmqzUVERIKMkreIiEiQUfIWEREJMvX2mreIiEhZBQUFZGVlkZvrb6bg4BETE0NKSgqRkZHVer6St4iIBI2srCzi4+NJS0srmakw6Fhr2blzJ1lZWaSnl50xunJUbS4iIkEjNzeXxMTEoE3c4KZHTkxMrFHtgZK3iIgElWBO3CVq+hqUvEVERGrBCy+8wObNm2tl30reIiIitUDJW0REpB5Yt24dPXr0+On+/fffz5133nnUdm+//Tbz58/nl7/8JX369OHQoUMBjUOtzUVEJCj97aOlLNu8L6D77N4mgb/+/Lga7+fss8/mscce4/7772fAgAEBiOxIKnmLiIgEGZW8RUQkKAWihFxVERERFBcX/3Tfq8FiVPIWERGppJYtW7J9+3Z27txJXl4eH3/8cbnbxsfHs3///lqJQyVvERGRSoqMjOQvf/kLgwcPJj09na5du5a77aWXXsq1115Lo0aNmDVrFo0aNQpYHMZaG7CdBdKAAQOs5vMWEZHSli9fTrdu3bwOIyD8vRZjzAJr7TFbuIVOtXl+DuTu9ToKERGRGguN5J27D+5OgXnPeh2JiIg0MDfccAN9+vQ5Ynn++edr9Zihcc07JgGatoMti72OREREGpjHH3+8zo8ZGiVvgDZ9YfMir6MQERGpsdBJ3q37wJ4NkLPT60hERERqJHSSd5u+7naLSt8iIhLcQid5t+7tblV1LiIiQS50knejptC8A2xWozUREald69at47XXXqu1/YdO8gZfozUlbxERqV1K3oHUpg/sy4ID272OREREgtCf//xnHnnkkZ/u//GPf+TRRx89ars77riDb775hj59+vDQQw8FPI7Q6OddoqTR2ubF0PlEb2MREZGa+fQO2LoksPts1RNOvqfch6+44grOPPNMbr75ZoqLi3n99deZO3fuUdvdc8893H///RVOXFIToZW8W/UCjGu0puQtIiJVlJaWRmJiIosWLWLbtm307duXxMTEOo8jtJJ3TAIkddJIayIiDUEFJeTadOWVV/LCCy+wdetWLr/8ck9iCK1r3qCR1kREpEbOOOMMPvvsM+bNm8dJJ53kd5vanMsbQjF5t+4D+7fAvi1eRyIiIkEoKiqKsWPHcu655xIeHu53m169ehEREUHv3r3VYC0gfhppbTEktPY2FhERCTrFxcXMnj2bt956q9xtIiMj+eqrr2othtArebfqCSZM/b1FRKTKli1bRseOHTn++OPp1KmTZ3GEXsk7Og6Suui6t4iIVFn37t3JzMz86f6SJUu46KKLjtgmOjqaOXPm1GocoZe8wVWdr/4SrAVjvI5GRESCVM+ePVm8uO5rckOv2hzcSGs522HfZq8jERERqbIQTd4lI62p6lxEJNhYa70OocZq+hoCkryNMROMMSuNMauNMXdUsN3ZxhhrjBkQiONWW8seYMKVvEVEgkxMTAw7d+4M6gRurWXnzp3ExMRUex81vuZtjAkHHgdOALKAecaYD621y8psFw/cBNTuVfzKiGoMLbvDpvleRyIiIlWQkpJCVlYW2dnZXodSIzExMaSkpFT7+YFosDYIWG2tzQQw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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(range(T-1), np.vstack(u))\n",
    "plt.plot(range(T), np.vstack(y))\n",
    "plt.xlabel(\"t\")\n",
    "plt.legend([\"u_t\",\"y_t\"])\n",
    "plt.title(\"Figure 17.4 Optimal input and output for $p = 0.2$\", fontsize=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Linear state feedback control.** To finish the example we implement the state feedback method in VMLS section 17.2.3. The plots in figure 17.5 reproduce VMLS figure 17.7.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 697,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lqr(A,B,C, x_init, x_des, T, rho):\n",
    "    n = np.shape(A)[0]\n",
    "    m = np.shape(B)[1]\n",
    "    p = np.shape(C)[0]\n",
    "    q = np.shape(x_init)[1]\n",
    "    Atil = np.vstack([np.hstack([np.kron(np.eye(T),C), np.zeros((p*T,m*(T-1)))]),np.hstack([np.zeros((m*(T-1),n*T)), np.sqrt(rho)*np.eye(m*(T-1))])])\n",
    "    btil = np.zeros((p*T + m *(T-1),q))\n",
    "    Ctil11 = np.hstack([np.kron(np.eye(T-1),A), np.zeros((n*(T-1),n))]) - np.hstack([np.zeros(((n*(T-1),n))), np.eye(n*(T-1))])\n",
    "    Ctil12 = np.kron(np.eye(T-1), B)\n",
    "    Ctil21 = np.vstack([np.hstack([np.eye(n),np.zeros((n,n*(T-1)))]),np.hstack([np.zeros((n,n*(T-1))),np.eye(n)])])\n",
    "    Ctil22 = np.zeros(((2*n),m*(T-1)))\n",
    "    Ctil = np.vstack([np.hstack([Ctil11, Ctil12]),np.hstack([Ctil21, Ctil22])])\n",
    "    dtil = np.vstack([np.zeros(((n*(T-1), q))), x_init, x_des])\n",
    "    z = cls_solve(Atil, btil, Ctil, dtil)\n",
    "    \n",
    "    xpre = np.vstack([np.hstack(z[(i-1)*n : i*n,:]) for i in range(1,T+1)])\n",
    "    x = [np.reshape(xp,(n,q)) for xp in xpre]\n",
    "    u = np.vstack([np.hstack(z[n*T+(i)*m : n*T+i+1*m, :]) for i in range(0,T-1)])\n",
    "    y = np.vstack([np.matmul(C,xt) for xt in x])\n",
    "    return x,u,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 698,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  if __name__ == '__main__':\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:11: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # This is added back by InteractiveShellApp.init_path()\n"
     ]
    }
   ],
   "source": [
    "#Solve LQ problem with x_init = I, x_des = 0\n",
    "rho = 1.0;\n",
    "n = 3\n",
    "xsf,usf,ysf = lqr(A,B,C,np.eye(n),np.zeros((n,n)), T, rho)\n",
    "K = usf[0]\n",
    "#Simulate over horizon 150\n",
    "TT = 150\n",
    "Xsf = np.hstack([x_init, np.zeros((n,TT-1))])\n",
    "for k in range(TT-1):\n",
    "    Xsf[:,k+1] = np.matmul((A+B*K),Xsf[:,k])\n",
    "usf = np.matmul(K,Xsf[:,0:TT-1])\n",
    "ysf = np.matmul(C,Xsf)\n",
    "#Also compute optimal LQ solution for rho = 1.0\n",
    "x,u,y = lqr(A,B,C, x_init, x_des, T, rho)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 699,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12da57b00>]"
      ]
     },
     "execution_count": 699,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12da57f28>]"
      ]
     },
     "execution_count": 699,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12da57e48>"
      ]
     },
     "execution_count": 699,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7Gy6d+/OHXfcwZw5cwC45557SEpKYvbs2cyePRuwb9MvXryYFStWMGfOHFasWPGz/fLy8vjLX/7CrFmzWLp0KZmZmfzzn/+s9dr333//odvvK1euPOaxVVVV3H333UybNu1QiD/00EMA3HjjjUycOJF58+b97Py1LRsL8Morr7BkyRIWL17MxIkTyc/PJzc3l5tvvpkPP/yQ5cuXM3Xq1CPO9fzzz/PZZ58xffp0rwU6qKUOgCs6jeD8Ksr3ZRMS29npckREvOM4LeqmcrAVPHfuXGbPns0VV1zBk08+WeukMx988AGTJ0+murqaXbt2sWbNGvr373/EPvPnz2fNmjWMGDECgMrKSoYNG1brtY++/f7555/Xeuz69etZtWoVY8eOBexFZxITEyksLGT//v2MGjUKgOuuu44vv/zy0PlqWzY2MzOTiRMn8vHHHwN2a37jxo3k5uYycuRI0tLSAIiJiTl0njfffJOUlBSmT59OYGBg3f/j1oFCHQjukA5ZkL99LckKdRGRRvH392f06NGMHj2afv368frrr/8s1Lds2cLTTz/NokWLiI6OZsKECbUul2pZFmPHjuXdd9+tdx3HOnblypX06dPnZ63x/fv3H3cp2NqWjf3222+ZNWsW8+bNIywsjNGjR1NeXn7MdeUB+vbty7Jly8jJyTkU+t6i2+9AVHJ3AIp3alibiEhjrF+/no0bD/9bumzZMjp3thtLNZdYLSoqIjw8nKioKPbs2XNEi7jmfkOHDuWHH34gKysLgLKyMjZs2FCnWo51bI8ePcjNzT0U6lVVVaxevZr27dsTFRXF999/D/CzJVxrWza2sLCQ6OhowsLCWLduHfPnzwdg2LBhzJkzhy1btgBQUFBw6DyDBg1i0qRJXHDBBezcubNOP0tdqaUOJCSnU2EFUJWb5XQpIiItWklJCXfffTf79+8nICCAbt26MXnyZABuueUWzjnnHBITE5k9ezaDBg2iT58+dO3a9dAt8tr2e+2117jqqquoqKgA4C9/+Qvdu3c/YS3x8fHHPHbatGncc889FBYWUl1dza9//Wv69OnDq6++eqij3FlnnXXE+Q4uG5uVlcXVV19NZmYm/fr148UXX6R///706NGDoUOHHrr25MmTueSSS3C73XTo0IGZM2ceca6nn36a8847j5kzZx7qUNhYbX7pVbBv0Wz5U28qYnrQ697pXjuviEhz8+WlV6VutPRqIxlj2BuYRLvS7U6XIiIi0mAKdY/i0E7EVe6AFnjnQkREBBTqh1RFdSKUcqySPU6XIiLSKC3xsarYGvu/nULdwy82HVAPeBFp2UJCQsjPz1ewt0CWZZGfn09ISEiDz6He7x7hid1hORTuWE9kj9OcLkdEpEFSUlLIyckhNzfX6VKkAUJCQkhJSWnw8Qp1j9iUDKotP8r31G38o4iILwoMDPT6hCbScuj2u0dqXCTbrAT88nX7XUREWiaFukdESCDZ/im0K97kdCkiIiINolCvYV9YGrEVOeCqcroUERGRelOo11AVnUEALijY4nQpIiIi9aZQryEgoScApTvWOFyJiIhI/SnUa4hK7Q1AYfYqhysRERGpP6+EujHmbGPMemNMljHmgVo+H2mMWWqMqTbGjD/qsxuMMRs92w3eqKehOid1ZKcVQ/WedU6WISIi0iCNDnVjjD/wb+AcoDdwlTGm91G7bQcmAO8cdWwM8AhwCjAEeMQYE93YmhqqU0wYm6xkgvZpWJuIiLQ83mipDwGyLMvabFlWJfAecGHNHSzL2mpZ1grAfdSxZwEzLcsqsCxrHzATONsLNTVIUIAfe4M6EV22VQu7iIhIi+ONUE8Gsmt8n+N5z6vHGmNuMcYsNsYsbsrpD0sj0wm2yqFoR5NdQ0REpCl4I9RNLe/VtZlb52Mty5psWVamZVmZ8fHxdS6u3uJ6AODeu77priEiItIEvBHqOUBqje9TgJ3NcGyTCEu2uwMU56x2sgwREZF680aoLwIyjDFpxpgg4Erg0zoeOwM40xgT7ekgd6bnPcckJaWy3wrnwE6NVRcRkZal0aFuWVY1cBd2GK8FPrAsa7Ux5lFjzAUAxpiTjTE5wGXAJGPMas+xBcBj2H8YLAIe9bznmK4dIsiykjF5Wq1NRERaFq8svWpZ1hfAF0e993CN14uwb63XduwrwCveqMMbEiKD+d4k06v4J6dLERERqRfNKHcUYwz7w9IIr94PZY7eNBAREakXhXotKqMz7Be5mllORERaDoV6LQKS+gNQtXOFw5WIiIjUnUK9Fh2SupBvRVC2Tc/VRUSk5VCo16JbQgRr3J2xdq90uhQREZE6U6jXoluHdqy1OtOucCO4qpwuR0REpE4U6rUICfQnt113AqxKyNOKbSIi0jIo1I/B3aGv/WK3OsuJiEjLoFA/hqjUPlRYgVTtWO50KSIiInWiUD+G7onRrLNSKc9e5nQpIiIidaJQP4ZeiXYP+KC81WDVdSVZERER5yjUjyE1OowsvzSCqwqhaIfT5YiIiJyQQv0Y/PwMJTG97G80Xl1ERFoAhfpxBCXa08Vau9QDXkREfJ9C/TjSkhPY4k6gQj3gRUSkBVCoH0fPjhGssTqrpS4iIi2CQv04enSMYJW7K6El2VCa73Q5IiIix6VQP47YdsFkhfS2v8lZ5GwxIiIiJ6BQPwFXwkCq8YfsBU6XIiIiclwK9RPomhTPWqszboW6iIj4OIX6CfRPbc9iVwbkLNEyrCIi4tMU6icwMKU9S9zd8XOVaxIaERHxaQr1E0iNCWVTSB/7m+yFzhYjIiJyHAr1EzDG0DE1nVwTp85yIiLi0xTqdTAgtT0Lqrups5yIiPg0hXodDEhtzxJ3Bn5FO6BQK7aJiIhvUqjXwcHOcgDk6Lm6iIj4JoV6HUSHB1ES3YtKE6zOciIi4rMU6nXUNzWOlWTAlu+cLkVERKRWCvU6GpjanlmVfWHPKija5XQ5IiIiP6NQr6MBqe2Z4+5vf7PpG2eLERERqYVCvY76JEWywXShJDAWsmY5XY6IiMjPKNTrKCTQn95JUSwOGGS31N0up0sSERE5gkK9HoZ2jWV6cW8o3w87ljpdjoiIyBEU6vUwPD2Wb6v7YBk/3YIXERGfo1CvhyFpMZT6R7IzvLdCXUREfI5CvR7CggIY1Cmab10DYMcSKCtwuiQREZFDFOr1NCI9jmmFPQBLQ9tERMSnKNTraUS3WJa7u1IeEg+rPnK6HBERkUMU6vU0ILU9oUGBLIo4AzbOgNJ8p0sSEREBFOr1Fujvx5C0GF4vGQrualit1rqIiPgGhXoDjOgWx6x98VTF9Ybl7zldjoiICAABThfQEo3oFgfA6vhzGbj2acjbCHEZDld1lKoDdke+nEWwexXkroeqMnBXgV8ARHeBmHRIGgg9zoGYrk5XLCIijaRQb4CeHSNIigrhjeKTGWj8YMX78Is/Ol0WWBZs+wGWvgnr/guVxXaAx/eETqdAcAT4BYKrEgo2w7YfYeUHMONBe5+BV8PgCRAS5fRPIiIiDaBQbwBjDOf2S+T1eVv5W8YoApe/D6MfBD+HnmZYFmz6Gr57GrbPs0O5z0XQ9xLoPAICgo997L6tsP5LWPMpzHzYPkfmjTDi1xAW02w/goiINJ6eqTfQuAFJVLkslrY/Cwq326HqhLyN8OZF8NalsH87nPMU3LceLnwe0n9x/EAH+zb80Nvhpi/hlm+h2xnw47/gX4NhyevgdjfDDyEiIt6gUG+gASlRpESHMrmgP0R1gm+ftFvMzaW6Ar5+DF4YBjt+grP/Bvf8BKfcAoGhDTtn0iC47FW4dS7E94DP7oFXzoT8Td6tXUREmoRCvYGMMZzXP5E5WYWUnnIv7FjcfK31vCx4+QyY+7R9i/3uxTD0thO3yuuqY1+48Uu4eJJ9J+DF02DZO837R4uIiNSbQr0RxvVLotpt8YX/6RCV2vStdcuyw3XSSCjMhivfhUsmQ7sO3r+WMTDgSrj9R7sFP/12+Pg2u1e9iIj4JIV6I/RNjqRzbBifrsqD035rDx9rqtZ6eRF8dLMdrkmD4LYfoOe5TXOtmqKS4YZP7Y6AK96D186D4t1Nf10REak3hXojGGM4r18iP27KJy/jMohMgdlPgNvl3QvlLIFJp9lzzZ/+Rztko5K9e43j8fOH0b+HK96Gvetg8umwa3nzXV9EROpEod5Il5yUgstt8c7i3TDmYXtJ1rn/8M7J3W74/lm7s5rbBTd+AaPut0PWCb3GwS9ngPGDV8+DLd85U4eIiNRKod5I3Tq04xc9O/D6j1sp73Up9Lscvv0rbP2hcScu3g1vXQKzHoEe58Jtc6HTUO8U3Rgd+8GvZtp3Ct661B7fLiIiPkGh7gU3n9aV/NJKPl62E8b9E6LT4MNfNmwFN8uCldPg36fA9vkw7lm4/A0IjfZ+4Q0VmWT3jk8cAFNvgOXvO12RiIigUPeKoV1j6JccxUtzN+MObGeP9S7Lh3cuh6JddT/R/mz44Hr7D4K4DLjte3t2N2OarviGCouB6z+xZ6ybfhusmOp0RSIibZ5C3QuMMdw8siubc0v5Zt1euwU7/hXYuxYmj7Jb3MdTXggzH7Fncdsww342f+NXENeteX6AhgoKh6vfh07D4eNbYNWHTlckItKmGasFTiiSmZlpLV682OkyjlDtcjPqqW9JjAph6m3DMMbAnjXw/jX29K19LoHeF9hTt1puqCiGnctg1TR77vWqMuh/pb0wTPtUp3+c+qkshbfGQ/YCGD8F+lzsdEUiIq2KMWaJZVmZJ9pPC7p4SYC/H7ePTueP01fx0dIdXDo4BRJ6w82zYdafYM10e0W0o4XGQP8r7NvsiQOavW6vCAqHa6baHeem/dLuHd/7QqerEhFpc9RS9yK32+LySfPYuLeEWb8dRXxEjWlbXVX2sqjbF0BgCARHQnRn6HIa+Ac2+JpF5VUs2baPNTuLyC2uILekApfLIjo8iNjwIHp0jGB4eiyx7bw0hezxVBTbwb5jCVz2uj0ETkREGq2uLXWFupdl7S3h3OfmMrZ3Av++5qQmuUZxeRUf/7SDqYtzWLWz8NDMtBEhAcS3C8bfz7CvrJKC0krcns96J0Zy5ZBUxg9OISyoCW/QlBfZQ/F2LrOft3cb03TXEhFpIxTqDvr37CyemrGe/1xzEuf0S/TaeTfsKeaNeVv5eOkOSitd9E2OZEzPBIakxTAwtT3hwUeGdbXLzYodhfyYlcf/1uxhRU4h7cMCuX5oZ24bnd504X5gH7x2PhRsgus+9o3x9SIiLZhC3UFVLjeXvPAjG/cW89L1mZyWEd+oc81YvZs3521jwZYCggL8GNc/keuHdWFgavs6n8eyLJZs28fk7zbzvzV7SIkO5YmL+zGye8NrO66SvfDK2VCaBxM+h8T+TXMdEZE2QKHusPySCq55eQGb80qZdN1gTu9Rv5XU9hSV886C7by7cDt7iytIiQ7l2qGduTwzlZjwoEbVtmBzPn/4eCWbc0u5PDOFRy/sS0hgE0w9uz/bDvbqcrjpK3vsvYiI1JtC3QfsK63k2ikL2LCnmN+M7c4Nw7r87BZ5TS63xYLN+by1YBszVu/BbVmM6h7P9cM6M6p7B/z9vDcJTXmVi4lfb+SFbzcxICWKSddl0jEqxGvnPyQvC145CwJC7GBvacP1RER8gELdRxSWVXHf1GXMWruX2PAgbjo1jUGd2tMlNpzwoACy95WxNb+UH7LymLlmD3kllUSFBnJ5ZgrXDu1M59jwJq1vxurd/Pb9ZYQHB/DyDZn0T6n7Lf0627UCXhsH4XF2sDfF+u8iIq2YQt3HLNm2j2dnbWDuxrxaP28XHMDoHvGc1acjY3snNM3t8GNYv7uYX76+iMKyKl67aQiDOzfBPPPbF8CbF0FMV/sZuy/NZS8i4uMU6j5q5/4DbMkrZUteKQcqXaTGhJISHUZGQjuCAxxaUhXYVXiAqybPJ7e4gldvHMKQtBjvX2TTN/DOFfYkO9dNh+B23r+GiEgrpFCXettTVM5VL81n1/5y3vrVKU3TYl/7mb1oTZfT4OoP7Il4RETkuOoa6lrQRQ5JiAzhvVuGkhAZzK9eX8Tm3BLvX6TX+XDhv2HLHHs1Ole1968hItJGKdTlCB0iQnjtxiEYY7jh1YXkFld4/yIDr4Zz/g7rPodP7gS32/vXEBFpgxTq8jNd4sKZckMmucUV/PL1RZRXubx/kVNuhdP/CCvegy9/By3wMZCIiK9RqEutBnWKZuKVg1iRU8iDH6+kSfpejPw/GH43LHoJvvmL988vItLGKNTlmM7s05F7x2Tw0dIdvDl/m/cvYAyMfQxOugHmPg0/POf9a4iItCFaT12O694xGazaUcijn62hV2IkJ3fx8lA3Y2DcM/ayrTMftpekzbzRu9cQEWkjvNJSN8acbYxZb4zJMsY8UMvnwcaY9z2fLzDGdPG838UYc8AYs8yzveiNesR7/PwM/7xiICnRodz1zlIKSiub4CL+cMlkyDgLPv8NrJzm/WuIiLQBjQ51Y4w/8G/gHKA3cJUxpvdRu/0S2GdZVjfgGeBvNT7bZFnWQM92W2PrEe+LCg3k+atPYl9pFb+btrxpnq/7B8Llr0PnEfDxrbD+K+9fQ0SklfNGS30IkGVZ1mbLsiqB94ALj9rnQuB1z+tpwBhjjPdWJ5Em1zc5igfO6cmstXt5Y14TPF8HCAyFq96Fjv3sCWo2zmqa64iItFLeCPVkILvG9zme92rdx7KsaqAQiPV8lmaM+ckYM8cYc5oX6pEmcuOILvyiZwce/2Ita3cVNc1FQiLh2o8gvge8e6U9A52IiNSJN0K9thb30fdnj7XPLqCTZVmDgN8C7xhjImu9iDG3GGMWG2MW5+bmNqpgaRhjDE+N709UaCC//WA5ldVNNGlMWAzc8BkkDYIPboAVU5vmOiIirYw3Qj0HqLlIdgqw81j7GGMCgCigwLKsCsuy8gEsy1oCbAK613YRy7ImW5aVaVlWZnx8vBfKloaIbRfMExf3Y+2uIv49O6vpLhTaHq77GDoPh49uhiWvn/gYEZE2zhuhvgjIMMakGWOCgCuBT4/a51PgBs/r8cA3lmVZxph4T0c7jDFdgQxgsxdqkiY0tncCFw9K5t+zs1i9s7DpLhTcDq6ZChlj4bN7YP5/mu5aIiKtQKND3fOM/C5gBrAW+MCyrNXGmEeNMRd4dpsCxBpjsrBvsx8c9jYSWGGMWY7dge42y7IKGluTNL1Hzu9NdHgQ/zd1RdPdhge789wVb0OvC+CrB+Dbv2lKWRGRY9DSq9JgM9fs4eY3FnPvmAx+M7bWpybe46qGT++G5e/AgKvh/OcgIKhpryki4iO09Ko0ubG9E7hoYFLT34YH8A+Ai16A0Q/awf7WJVCmmzoiIjUp1KVR/nRBn+a5DQ/2lLKjfw8XT4bsBTDlTChQFwwRkYMU6tIo7cOCmqc3fE0DroDrP4GyPHj5DNg+v3muKyLi4xTq0mg1b8Ov313cPBftPBx+9TWERMHrF8DSN5rnuiIiPkyhLl7x8Pl9iAgJ4KGPV+J2N1Pny9h0O9g7D7M70X16N1SVN8+1RUR8kEJdvCImPIgHz+3F4m37eH9x9okP8JawGHta2dPus1vrU8ZC7obmu76IiA9RqIvXjB+cwilpMfz1i7XkFlc034X9/GHMw3DVe1CYA5NGwsKXNJ5dRNochbp4jTGGxy/uR3mVm7/8d03zF9DjHLhjnv28/Yv/g7cvg+I9zV+HiIhDFOriVd06tOO20el8smwnczc6sPBOREe49kM45ynYOhf+MwzW/bf56xARcYBCXbzujtHppMWF88fpqyivcjV/AcbAKbfALXMgMgneuxqm/RKKdzd/LSIizUihLl4XEujP4xf1ZVt+Gc9/00xj12vToSf86hsY9XtY+yk8fzLMf9GeclZEpBVSqEuTGN4tjksGJTPpu01s3NNMY9drExAEpz8Id8yHlEz46vfw0mjIXuRcTSIiTUShLk3mofN6ER4cwIPNOXb9WGLT7aFvl70Opfkw5Qz45E4o3OFsXSIiXqRQlyYT2y6YB8/pxaKt+5i6pBnHrh+LMdDnIrhrIQy/G1Z8ABMHwYyH7KAXEWnhFOrSpC7LTGFIWgxPfLGOvJJmHLt+PMERcOZf4O4l0G88zH8BnhsA3z4JFQ4+KhARaSSFujQpYwxPXNyXsspqnvjvWqfLOVL7TvZyrrfPg66j4Nu/2uH+3dNwYL/T1YmI1JtCXZpctw4R3DYqnY9+2sEPWXlOl/NzHXrClW/bPeUTB8I3j8Ezfezb8kU7na5ORKTOFOrSLO48vRtdYsN46OOVzoxdr4uUwXDdR3DrXHt2uvn/gWf7w/Q7YK+P3WUQEamFQl2aRUigP49f3I+t+WXNt+56QyX2h0tfhnt+gsybYNVH8MJQeG0crJ4OriqnKxQRqZVCXZrNCM/Y9RfnODx2va6iO8O5f4ffrIYz/gT7tsHUG+DZfnanuqJdTlcoInIEhbo0K58au15X4bFw6m/g3mVw1fuQ0NcO9Wf6wLtXwdrPobrS6SpFRBTq0rxqjl3/oDnXXfcGP3/ocTZcOw3uWQrD74IdS+D9a+CfveCrP8DuVU5XKSJtmLFa4JrTmZmZ1uLFi50uQxrIsiyumDyfdbuK+Pq+0cRHBDtdUsO5qmHT17DsbVj3BbirIHEADLzWHgMfFuN0hSLSChhjlliLwgRDAAAgAElEQVSWlXmi/dRSl2Znj13vx4EqlzPrrnuTfwB0PwsufwP+bwOc83ewLPjyfvhHD3jvGrtzXdUBpysVkTZAoS6O6NahHbeP7sYny3by3QYH1l1vCmExcMqtcNtcuO17OPlmyFlkd657urs9NG7TN1olTkSajG6/i2PKq1yc+9xcKl1uZvx6JOHBAU6X5H1uF2ydCyunwppPoaIIwjtA30ug32WQPNiek15E5DjqevtdoS6OWrilgMsnzWPC8C786YI+TpfTtKrKYeP/7IDfMANcFRDdxQ73fpdBfA+nKxQRH6VQlxbj4U9W8eb8bUy9dRiZXdpIx7LyQnso3MqpsGUOWG7o2M8O976XQlSK0xWKiA9RqEuLUVJRzVnPfEdwgB9f3HsaIYH+TpfUvIr3wOqPYeUH9hA5gE7D7Vv0vS+Edh2crU9EHKdQlxZl7sZcrpuykNtGpfPAOT2dLsc5+Ztg1Yf2lrsOjB+kjbRb7z3HaYicSBulUJcW53fTlvPh0h18fMdw+qe0d7oc5+1ZY4f76o+gYDP4BUL6LzwBf669LryItAkKdWlxCg9UMfafc4gJD+LTu04lKEAjLgF73PuuZZ4W/MdQlAMBIZBxpn2LPuMsCApzukoRaUIKdWmRZq7Zw81vLObXZ2Tw6zO6O12O73G77bHvqz60n8OX7oXAcLvl3vdSuyUf0IJn6BORWinUpcW6592f+HLVLqbfOYI+SVFOl+O73C7Y9oMd8Gs+gQP7IDgKep1vt+DTRtkz3olIi6dQlxaroLSSs579juiwQD6969S21xu+IVxVsPlbe+33dZ/bk9yExdq95/teavem99PjDJGWSqEuLdqcDbnc8MpCbhzRhUfOb+WT0nhbVTlkzbJb8Bu+gqoyiEiEPhfbAa9Z7ERanLqGuu7NiU8a1T2eCcO78OoPWzm9RwdGdo93uqSWIzAEeo2zt8pSO9hXfQSLpsD8F6B9Jzvge10IyScp4EVaEbXUxWeVV7kY96/vKTpQxYxfjyQ6PMjpklq28kJ7edhV0+xb9e5qiEyxn8H3vgBST7HXjBcRn6Pb79IqrNpRyMUv/MCYngn859qTMGpVeseBfbD+S3uRmU3f2PPQh3fwtPDPhy6ngX+g01WKiIdCXVqNF+ds4skv1/HU+P5clpnqdDmtT0WxvdDMmk/tr1VlEBoNPc6FXhdA+ukaJifiMIW6tBout8U1L89nZU4hX947kk6xmmilyVQdgKyvYe2nsP4rqCiEoHZ2sHc/x57wpp36N4g0N4W6tCo79h/g7Ge/o2t8Oz64dSjBAXr22+SqK+0V5Nb9114qtngnYCAlE7qfbW8JfdTRTqQZKNSl1flq1S5ue2spNwzrzJ8v7Ot0OW2LZcHuFXbrfcOXsPMn+/2oVOh+lt2K73Kq3fNeRLxOoS6t0l8+X8PL329h4lWDuGBAktPltF3Fu+3W+4YZsHm2/Rw+MBy6jrZv1XcbAzFdna5SpNVQqEurVOVyc9Xk+azZVcQnd44gI0ErlTmu6gBs/d7uTZ81E/Zvt9+P7mLPRZ8+BtJOgxBN+SvSUAp1abV2F5Yz7l9zaR8WxCd3jiA8WHMo+QzLspeJ3fSNvW35DipLwPhDysl2yKedZs9qpx71InWmUJdW7cesPK6dsoBx/ZN47sqBGr/uq6or7VXlDob8zp8ACwJCIXWIHfBdToOkkyBAkwuJHItCXVq9f8/O4qkZ63n0wj5cP6yL0+VIXZQVwLYf7dv1W+fCnlX2+4Fh9ox2aadBp2GQNAgCQ52tVcSHaO53afVuH5XOkm37eOzzNfRKjOTkLjFOlyQnEhZzeF56gNJ8e/nYrXNhy1z4+lH7fb9ASBwAnYbaLfrUoRCR4FzdIi2EWurSohWWVXHRCz9QeKCK6XeM0MQ0LV1pHmQvhOz59tcdS+0pbMHueJd6ir11GgrxPTVXvbQZuv0ubcbm3BIufuFH4iOC+eiO4USGaM7yVqO6Anat8IT8Ati+AEr32p8FR0LSQPt5fNIge8W5qFRNhiOtkkJd2pQfN+Vx/ZSFDEuP5dUJJxPg7+d0SdIULAv2bbUDPnuB3ZLfsxrcVfbnYXGHAz7pJPtruw6OliziDQp1aXPeW7idBz5ayfXDOvOoZpxrO6or7A53O5bCzmWwcynkrgPLbX8emWwHfeIA6NjP3iKT1aKXFkUd5aTNuXJIJzbnlTL5u82kx7fjhuFdnC5JmkNAsD3uPXnw4fcqSuxpbXf+5An7n+w57PE0YkKj7XBP6Hc46ON7aLlZafEU6tKq/P7snmzOLeXPn62mU2wYp/fQrdc2KbgddB5ubwdVFMOeNbBnJez2bIunQHW5/bl/kN35rmM/6NAbOvS0v0YkqlUvLYZuv0urU1pRzWUvzmNLXinv3HwKgzpFO12S+CpXNRRs8oT8isNhX5p7eJ/gKOjQyw75+F6e170gPF5hL81Gz9SlTdtbXM74/8yjqLyKabcNo1sHzREv9VCaD7lrYW+NLXctHNh3eJ+w2Boh39Nu5cd1V9hLk1CoS5u3Lb+US/8zj0B/w7Tbh5PcXjOUSSNYFpTshb1r7I54e9fA3nV24FcWH94vOAriukFsBsR5ttgMe9U6LU0rDaRQFwHW7CziisnziI8IZtptw4kJ1/zi4mWWBUU77KDPy4L8jZDn2Yp31tjRQPtOnqDvDrHdPIHfDdp1BD8Nw5RjU6iLeCzcUsB1UxbQs2MEb988lHZa1U2aS0UJ5GfZW95GyNtgh37+JnsN+oMCQuwZ82K6QnQaxHi26DT7DwH1ym/zFOoiNcxas4db31rCsK6xvHxDJiGBml5UHOR22634vA32UrUFW+xtn+dr9YHD+xp/aJ96VOB3hfad7fe1Tn2boFAXOcq0JTn839TljOnZgf9cO5igAN3uFB9kWVC82xPwBwN/8+HvywuP3D+kvR3u7TvbrfqjN4V+q6DJZ0SOMn5wCuVVLv44fRV3v7uU568+iUBNJyu+xhiITLS3muPsDyorsAN+//Yjt/xN9pr1NW/rgx3q7TtBVCc7/COTITLJ/hqVbD/P11r2rYZCXdqUa4d2psrl5s+freHX7y3juSsHap54aVnCYuyt5gx6B1mWHfr7tx0O+8Js++u+LbBlDlSWHHWQsefHPxj0h74efO3ZAoKb5ceTxlGoS5tz44g0ql0Wj3+xlgB/wz8vH4i/n8YVSytgDITH2lvySbXvU15k99Yv2gFFOz2b53X+Jntd+4rCnx8XFne4ZR+RAO1qbBEdD7/WsD1HKdSlTbp5ZFeq3G7+/tV6Avz8eGp8f/wU7NIWhETaW4dex96nohiKdtUIfs8fAYU7oHgX7Fpmz7p3cNGcI84fdezAP/jHQFicfbfBTx1WvU2hLm3WHaO7UVVt8cysDQT6G564uJ+CXQQgOALiIyC++7H3cbugNA9KdtuT8hTvhpI9h7fiPbBjif366Of8ABh7YZ3wOHsWvrBY+3VYnOe9Gq/D4uzP/RVZJ6L/QtKm3TOmG1UuN8/PziLA3/DYhX0xmuJT5MT8/O2Wd0TC8fezLLvlX7L38B8AZfl2S780D8ryPNPyrodtP9h9AjjGqKzQ6BpB7/kjIDTGfj802m79H3x9cGtjfQEU6tKmGWO478zuVLndTJqzmQA/Px45v7eCXcRbjDl8yz+u24n3d7vsOfaPCP28I1+X5dsT+myfD+X7wV197PMFhtcI+fbH/wMgJOrwFhTRImf5U6hLm2eM4YGze1JVbfHKD1sI9Dc8eG4vBbuIE/z8D99+rwvLsnv0lxXYfwycaMvbcHhfd9VxTmwg2PPHyMGgDz74+njvtT/8ngNDBRXqItjB/v/G9aLa7ealuVsI9Pfj/rN6KNhFfJ0xdh+A4AiI7lz34ywLKktrBH6BPTKgvBAqPF/LC498rygH9q6236soqr2j4EFDboVz/974n6+eFOoiHsYY/nR+H6pcFi98u4lAfz9+M/Y4HYVEpOUyBoLb2Vv71Poff/AOQW3hX154/NEFTUihLlKDn5/h8Yv6Uu1y89zXGwn0N9z1iwynyxIRX1PzDkFUitPVHKJQFzmKn5/hyUv743JbPP2/DQT4+3HbqHSnyxIROSGvdO0zxpxtjFlvjMkyxjxQy+fBxpj3PZ8vMMZ0qfHZHzzvrzfGnOWNekQay9/P8NRlAzh/QBJPfrmOKd9vcbokEZETanRL3RjjD/wbGAvkAIuMMZ9alrWmxm6/BPZZltXNGHMl8DfgCmNMb+BKoA+QBMwyxnS3LMvV2LpEGsvfz/DM5QOodrl57PM1RIQEcHlmA569iYg0E2/cfh8CZFmWtRnAGPMecCFQM9QvBP7keT0NeN7Y3YovBN6zLKsC2GKMyfKcb54X6hJptAB/P567chAlry/igQ9XEBkSyNl9OzpdlviIkopqKquP0wNa2qzgAD/Cg5v/Cbc3rpgMZNf4Pgc45Vj7WJZVbYwpBGI9788/6thkL9Qk4jVBAX5Mum4w17y8gHve/YlXbzyZEd3qOIZWWq3l2fu5+IUfcB9j8jNp224akcbD5/du9ut6I9RrG8h79K/5sfapy7H2CYy5BbgFoFOnTvWpT6TRwoICeHXCyVwxaT63vLGYd24eyoDU9k6XJQ7aVViO24LbRqWTGKWVyeRIvRIjHbmuN0I9B6j5oDEF2HmMfXKMMQFAFFBQx2MBsCxrMjAZIDMzU38bS7NrHxbEm78cwqUv/siEVxcy9bZhdOsQ4XRZ4hC3Zf8zdNGgJHp2dOYfcJGjeaP3+yIgwxiTZowJwu749ulR+3wK3OB5PR74xrIsy/P+lZ7e8WlABrDQCzWJNIkOkSG89ctTCPD349qXF7Jj/wGnSxKHVHvuuwdoZT/xIY0OdcuyqoG7gBnAWuADy7JWG2MeNcZc4NltChDr6Qj3W+ABz7GrgQ+wO9V9Bdypnu/i6zrHhvPGTUMorazmxlcXUlR+vPmjpbVye0LdT1MJiw/xyjh1y7K+sCyru2VZ6ZZlPe5572HLsj71vC63LOsyy7K6WZY15GBPec9nj3uO62FZ1pfeqEekqfVKjGTStYPZnFvK7W8tUQ/oNuhwS73lreQlrZd+G0UaaHi3OJ68tD8/ZOXz0McrsSx19WhLDrXU9a+o+BBNEyvSCOMHp7C9oIyJX28kI6Edt4zUdLJthVrq4osU6iKN9JszMti0t4S/frmOjA4RnN6zg9MlSTNwWWqpi+/Rr6NIIxljeOqy/vROjOSed38ia2+x0yVJM3C57H4UaqmLL9Fvo4gXhAUFMPn6TIID/bj5jSXqEd8GuDxdKPzV+118iEJdxEuS24fywjWD2V5Qxv1Tl6vjXCvnctstdX9/hbr4DoW6iBcNSYvhD+f0ZMbqPUz+bvOJD5AWy3P3XS118SkKdREv++WpaZzbryN/+2od8zblO12ONJFDLXXNKCc+RKEu4mXGGP4+fgBdYsP59fs/UVBa6XRJ0gQOtdQV6uJDFOoiTaBdcAD/unoQ+0qr+N00PV9vjQ621JXp4ksU6iJNpE9SFH84tyez1u7l9R+3Ol2OeFm128Lfz2D0TF18iEJdpAlNGN6FMT078MQX61izs8jpcsSLXJalW+/icxTqIk3InphmAJGhgfz2g2VUVGsRwtbC5bLU8118jkJdpInFhAfxt0v7sW53Mc/O2uh0OeIlLsvSWuricxTqIs1gTK8ErshMZdKcTSzZVuB0OeIFLreFn0JdfIxCXaSZ/HFcL5Lah/LbD5ZzoFK34Vs6l1stdfE9CnWRZhIREshT4wewLb+Mf85c73Q50kgutzrKie9RqIs0o2HpsVw1pBNTvt/C8uz9TpcjjaBQF1+kUBdpZn84tyfxEcH8/sMVVFa7nS5HGkihLr5IoS7SzCJDAnn8Irs3/ItzNjldjjSQxqmLL1KoizjgjN4JjOufyPOzs9iaV+p0OdIA1Wqpiw9SqIs45OFxvQny9+PhT1drbvgWyO3W5DPiexTqIg7pEBnCfWd257sNuXy5arfT5Ug9qaUuvkihLuKg64Z2pndiJI9+toaSimqny5F6cCvUxQcp1EUcFODvx+MX92VPcTkTv9YUsi1JtSafER+kUBdx2KBO0Yw/KYVXf9jCtnx1mmsp3JamiRXfo1AX8QH3n9WDQH8//vrFOqdLkTqqdqmlLr5HoS7iAzpEhnD7qHS+Wr2b+ZvznS5H6sBlWfip97v4GIW6iI+4eWRXkqJCeOzzNbjcGuLm61xuiwB/hbr4FoW6iI8ICfTn9+f0ZPXOIj5cmuN0OXICLrda6uJ7FOoiPuSCAUkM6tSep2asp1RD3Hyall4VX6RQF/EhxhgeHteb3OIKzQvv47Sgi/gihbqIjxnUKZoLByYx+bvN7Nh/wOly5BgU6uKLFOoiPuj3Z/fEGPjblxri5quq3W6FuvgchbqID0pqH8otp3Xl0+U7WZlT6HQ5Ugu3Bf5++idUfIt+I0V81M0juxIdFsjfZ6i1XheWZbFhTzHZBWXNcr1qt1sd5cTnBDhdgIjULiIkkDtP78Zf/ruWeZvyGZYe63RJPml3YTmTvtvEzDV7yNl3gAA/w4ThXbj3jAwiQgKb7LpuNxrSJj5HLXURH3bt0M4kRoXw9xnrtOZ6LXYVHuDySfN4e8F2eiRE8MTF/bgsM4UpP2xhzD/msGhrQZNdWy118UUKdREfFhLoz71jMvhp+35mrd3rdDk+ZW9ROde8tICC0ko+uHUYUyaczNWndOKvl/Rn+h0jCAn0574PllNe5WqS67vcaEEX8TkKdREfN35wCl3jwnlqxjpNH+tReKCKa15ewO6icl678WQGprY/4vMBqe154uJ+bC8o4+W5m5ukBpda6uKDFOoiPi7A34/7zuzBhj0lfLJsh9Pl+IQnv1zHptwSXr4hk8wuMbXuc2pGHOf07cjzs7OaZLy/xqmLL1Koi7QA5/TtSN/kSJ6ZtYHKarfT5ThqweZ83l24nV+d1pXh6XHH3feh83oB8MR/13q9DoW6+CKFukgL4OdnuP+snmQXHOC9RdudLscx5VUu/vDRSlJjQvnNGd1PuH9KdBh3jO7Gf1fu4qft+7xai8tSqIvvUaiLtBAjM+I4JS2GiV9nUVbZNhd7+ffsLDbnlfLExf0IDfKv0zE3nZpGUIAfnyzb6dVa1FIXX6RQF2khjDH87uye5JVU8OoPW50up9nl7CvjxTmbuHhQMqdlxNf5uHbBAZzeI57/rtzl1Y6GLreFv8api49RqIu0IIM7RzOmZwcmzdlE4YEqp8tpVv/6Osvzh02Peh87rn8SucUVXhu3blmWZ5pYhbr4FoW6SAvzm7HdKSqvZsr3W5wupdlsyStl2tIcrjmlE4lRofU+/hc9OxAS6Md/V+zySj0HW/wKdfE1CnWRFqZvchTn9uvIK99voaC00ulymsVzszYQ5O/H7aPTG3R8eHAAY3om8OWqXVS7Gj96oFqhLj5KoS7SAv3mjO6UVlYz6btNTpfS5DbsKeaT5Tu5fnhnOkSENPg85/VPJK+kkoVbGn8L3m0p1MU3KdRFWqCMhAguGpjM6z9uZW9xudPlNKnnvt5IeFAAt41sWCv9oNN7dCAsyJ/PvHAL/mBLXTPKia9RqIu0UPeOyaDKZfHC7NbbWt+eX8aXK3dxzdBORIcHNepcoUH+jOmVwFerGt8L3u05Xqu0ia9RqIu0UF3iwrlscArvLNjOziaYBtUXTPl+M/5+hptGpHnlfKf3iGdfWRVZe0sadZ5DLXV/hbr4FoW6SAt295gMAP71TZbDlXjfvtJKPlicw4UDk0mIbPiz9JoGd44GYMm2xs0up5a6+CqFukgLltw+lKuGpDJ1cTbb8kudLser3l6wjQNVLm4+ravXztkpJoy4dkEs3ta4znJ6pi6+SqEu0sLdeXo3/P0Mz3290elSvKa8ysVrP25jVPd4enSM8Np5jTGc1CmapY1sqR98Jq/11MXXKNRFWrgOkSHcMLwL03/aQdbeYqfL8YrpP+0gr6SCW0Z6r5V+0ODO0WzNLyOvpKLB53CppS4+SqEu0grcOrIroYH+PDOr5bfW3W6Ll+Zupk9SJMPTY71+/oPP1RvTWtfkM+KrFOoirUBsu2BuOjWN/67YxZqdRU6X0yiz1+9lU24pt4zsimmCjmh9k6MI9DcsacRSrJp8RnyVQl2klfjVaV2JDAngnzM3OF1Ko0z6bjNJUSGc2y+xSc4fEuhP3+SoxrXUXbr9Lr5JoS7SSkSFBnLLyK7MWruHZdn7nS6nQZZl72fhlgJuOjWNQP+m++dpcKdolucUUlndsHngD7bUNaRNfI1CXaQVmTAijZjwIP7xv/VOl9IgL83dTERIAFcO6dSk1xncOZrKajerdxY26HhNPiO+SqEu0oq0Cw7g9lHpzN2Yx4LN+U6XUy/ZBfaUsFef0ol2wQFNeq2TGjkJjUuTz4iPUqiLtDLXDu1Mh4hg/vG/DVhW4+Y4b05Tvt+Cv5/hxuHemRL2eBIiQ0iJDm10qAf46Z9Q8S36jRRpZUKD/LnrF91YuLWA77PynC6nTvaXVfL+omwuGJBMxyjvTAl7Iv2So1i3u2Hj+g9PPuPNikQaT7+SIq3QFSenktw+lKdbSGv97QXb7SlhRzZ9K/2gjIQItuWXUl7lqvexaqmLr9JvpEgrFBzgzz1jurE8ez+z1u51upzjKq9y8eoPWxnZPZ6eHSOb7brdE9rhtmBTbv1XbHMdGqfu7apEGke/kiKt1CUnpdA1Lpy/fbWOalfDhm41h0+W2VPC3toEU8IeT/cEe075hizD6nLb/z391VIXH6PfSJFWKtDfj9+d3ZOsvSW8vzjb6XJq5XZbTP5uM70Tm2ZK2OPpEhtOgJ9hw576P1c/+DeSv3q/i49RqIu0Ymf1SeDkLtE8M3MjJRXVTpfzMzNW72ZTbim3jmqaKWGPJyjAjy5x4WzY05iWukJdfItCXaQVM8bw4Lm9yCupYPJ3m50u5wiWZfGvb7JIiwtnXP8kR2rontCugbff7a8KdfE1CnWRVm5Qp2jO65/IS99tZndhudPlHDJ7/V7W7CrijtHpjoVjtw4N6wFfrZa6+CiFukgb8MDZPXFZFn/9cq3TpQCHW+nJ7UO5aFCyY3Uc7AG/Obe0XsdplTbxVQp1kTYgNSaMW0d25ZNlO31i+th5m/L5aft+bhud3qQLt5zIwR7wG/fWr7OcVmkTX6VQF2kj7hjdjeT2oTzy6WpHh7hZlsUzszbQISKYywanOFYHNLwH/KFV2hTq4mMU6iJtRGiQPw+d14t1u4t5Z+F2x+qYtXYvi7bu494zMggJ9HesDjjcA35jPXvAH1qlTaEuPqZRoW6MiTHGzDTGbPR8jT7Gfjd49tlojLmhxvvfGmPWG2OWebYOjalHRI7vnL4dGdEtlqdmrGdvUfN3mqt2ufn7V+voGhfO5ZmpzX792nRPaMfGevaAd2uVNvFRjW2pPwB8bVlWBvC15/sjGGNigEeAU4AhwCNHhf81lmUN9Gy+PZ+lSAtnjOHRC/tSUe3m/32yqtnnhf9o6Q427i3h/rN6OPosvaaG9IBXS118VWP/X3Uh8Lrn9evARbXscxYw07KsAsuy9gEzgbMbeV0RaaD0+Hb85ozuzFi9hy9W7m6265ZXufjnzA0MTG3P2X07Ntt1T6QhPeAPLuji769QF9/S2FBPsCxrF4Dna223z5OBmnNU5njeO+hVz633/2eOM6WUMeYWY8xiY8zi3NzcRpYt0rbdfFoa/ZKjeOTTVewrrWyWa744ZxO7i8p54JyezT573PE0pAf8oVD3oZ9DBOoQ6saYWcaYVbVsF9bxGrX91h+853eNZVn9gNM823XHOollWZMty8q0LCszPj6+jpcWkdoE+Pvxt0v7s7+sqlluw2ftLeaF2Zs4f0ASQ7s27xzvJ9IlNhx/P8OmejxXP3j7XePUxdecMNQtyzrDsqy+tWyfAHuMMYkAnq+1PRPPAWr2iEkBdnrOvcPztRh4B/uZu4g0g95JkfxmbHc+X7GLdxc23YIvbrfFHz5aSWiQPw+P691k12mooAA/OkaGkL3vQJ2PcSvUxUc19vb7p8DB3uw3AJ/Uss8M4ExjTLSng9yZwAxjTIAxJg7AGBMIjANWNbIeEamH20elc1pGHH/6bDVrdhY1yTXeXbSdRVv38dB5vYiPCG6SazRWakwo2wvK6rx/tW6/i49qbKg/CYw1xmwExnq+xxiTaYx5GcCyrALgMWCRZ3vU814wdrivAJYBO4CXGlmPiNSDn5/hmSsG0j40kLveWer1ldyyC8p48st1DE+PdXyimePpFBNGdj1C3W1ZGKPJZ8T3NCrULcvKtyxrjGVZGZ6vBZ73F1uW9asa+71iWVY3z/aq571Sy7IGW5bV37KsPpZl3WtZVv1WVRCRRotrF8zEqwaxNb+Uu95ZSpWXZps7UOniljeXYIAnL+nvU53jjpYaHcbe4oo6D2urdlsaziY+yTcGioqIo4Z2jeWJi/vx7fpcfjdtxaFnxg1lWRa/+3AF63YXMfGqQXSKDfNSpU0jNcauL6eOz9XdbksTz4hPCnC6ABHxDVcO6UReSQVP/28DseFBPHRerwa3rid9t5nPlu/k/rN6MLqH708UmRoTCkD2vjK6dWh3wv3VUhdfpVAXkUPuPL0beSWVvPz9ForLq3nsor4EBdT9hp5lWTz/TRb/mLmB8/oncsfo9Cas1ntSo+2Wel2fq7vclp6ni09SqIvIIcYYHh7Xm4iQAP71TRab80r4z7WDiWt34l7rLrfFI5+u4q3527lkUDJ/G+/bz9Frio8IJjjAr16hrpa6+CI9UxeRI/j5Ge47swcTrxrEipxCznluLm/M20pl9bE70C3eWsAVk+bx1vzt3DYqnX9cPsBn5navC2MMqTFhZBfU7Zm6y7I0Rl18klrqIlKrCwYk0bGAbxQAAA84SURBVDUunEc/W8PDn6xm0pzNjB+cQp+kSDISIsgrqWDDnmK+WbuXr9ftJT4imKcvG8B4Hx66djyp0aFk76tjS92lUBffpFAXkWPqmxzF+7cO5buNeTw7awMTv9nI0TPKtg8L5Hdn92DC8C6EBbXcf1JSY8JYsm1fnfZ1WZYmnhGf1HL/HygizcIYw6ju8YzqHk9pRTXrdhezaW8J8RHBZCS0IykqtFV0GkuNDqOovJrCsiqiwgKPu6/LbWmFNvFJCnURqbPw4AAGd45mcOdop0vxuprD2qLCoo67r8utlrr4ppbTk0VEpAml1GNYm8utZ+rimxTqIiIcnlWuLp3lFOriqxTqIiJAVGggUaGBdRrWVu228PfTP5/ie/RbKSLikRpTt2FtbsuiBQ3DlzZEv5YiIh6p0XVbglUtdfFV+q0UEfFIjQkje9+BE65S59Y0seKjFOoiIh6p0aFUVrvJLak47n7VbreGtIlPUqiLiHikHFpX/fi34N1u1PtdfJJCXUTEIzEqBIBdheXH3a/a7Vaoi09SqIuIeHSMtEN99wlC3WWppS6+SaEuIuIRFRpIcIAfe4uP/0zdpZa6+CiFuoiIhzGGjlEhJ2ypV2vpVfFRCnURkRoSIkLYXXT8UHdr6VXxUQp1EZEaEqJC2HOCUK/W0qvioxTqIiI1dIwMZndhOZZ17Alo3Fp6VXyUQl1EpIaEyBAqqt0UHqg65j7VmlFOfJRCXUSkho6eserHe67udlv4KdTFBynURURqqMtYdbXUxVcp1EVEakjwhPrxOsu5LbXUxTcp1EVEaugQGQzA7sJjT0Cjlrr4KoW6iEgNwQH/v737j63rvOs4/v7ajp3ZibEdt0lpCu1QBIzxY1U0yo8h1K5aO6ZmSPujMEEkivYPEuOXWKtISPyDmIYoII2hqoUWNG3TusGiSkyUUAn+WSEbrCt0pWEbLFvWJG3SpMky2/d++eOcazvOvfZNnPY+9+T9kizf8+Mmz6Pn5HzyPOec54wyNzXOi2d799Rb7WTEu99VIENdktbYOb2VF9e5pt6yp65CGeqStMau6Yl1735vtZ0mVmUy1CVpjV0bzCpnqKtUhrokrbFzeisnX11gYanddXsrHX5XmQx1SVqj86z68S43y7XbSSY+0qYiGeqStMZ6z6q36jnh7amrRIa6JK2xc3lWuUufVW+1q1C3p64SGeqStMZ68793Qt2eukpkqEvSGrOTWxgfG+k6/L7U6ak7+YwKZKhL0hoRwc7pia6h3ranroIZ6pLUxa7prV3f1NbpqfucukpkqEtSFzunu09A085OqHv6VHk8KiWpi53TW/nWmQtkHeIdKz31QZRKWp+HpSR1cd32CS4stjm30LpofatlT13l8qiUpC7mt1XvVX/p1YufVW+lPXWVy8NSkrrYsW0cgJNrQ71dzQdvT10l8qiUpC6uq3vqJ19duGh9q37Hy6jPqatAhrokddGrp7603FM31FUeQ12Sutgx1bmmfnFPvd3pqRvqKpChLkldjI+NML11rGdP3RnlVCJDXZJ6mN8+cWlPPX1Lm8plqEtSD/NTE5xY21NvOfe7ymWoS1IP89vHL32kLX1Lm8plqEtSDzumLh1+X36f+qihrvIY6pLUw/y2CV759iILS+3ldS3f0qaCGeqS1EPnWfWXz6301pdD3eF3FchQl6Qe5pdnlVu5rm5PXSUz1CWph+u2XzqrnKGukhnqktRDZ1a51fO/d+5+95E2lchQl6Qe5rdf+vrVTk/dyWdUIkNdknqYGh9lYmyk6/C7PXWVyFCXpB4igvltFz+rvtR28hmVy1CXpHXMbxu/aKrYtpPPqGCGuiSto1dP3efUVSJDXZLWsWPbxfO/d97S5iNtKpGhLknrmN82wcvnFpaH3TtvaTPUVSJDXZLWsWPbBEvt5JVvLwJOPqOyGeqStI75ev73l85VQ/Ath99VMENdktbRmf/9xNnqZjl76iqZoS5J6+iE+nJP3bvfVTBDXZLW0Xn96smzVagv2VNXwQx1SVrH7OQ4IwEv1e9Ub7eTkahmm5NKY6hL0jpGR4K5qZVn1ZfaydiIp06VySNTkjYwv21i+Ua5diZmukq1qUMzIuYi4smIeKH+Pdtjv89GxOmIeGLN+lsi4un6+5+IiPHNlEeSXgtzU+OcOl+F+lLLnrrKtdkj837gUGbuAQ7Vy918CPilLus/CDxYf/8UcN8myyNJV93s5EqotzO9SU7F2myo7wMeqz8/Bry7206ZeQg4u3pdVHeZ3A48vtH3JWmQZia3cPp8NaPcUrttqKtYmw31nZl5DKD+ff1lfHcHcDozl+rlo8CNvXaOiPdFxOGIOHzixIkrLrAkXa65qXFOn6/mf2+1fZxN5RrbaIeI+EdgV5dNBzb5d3f7V5G9ds7Mh4CHAPbu3dtzP0m62mYmx2knnLmwSKvdduIZFWvDUM/Mt/faFhEvRsQNmXksIm4Ajl/G330SmImIsbq3vhv45mV8X5JeF3NTWwA4dX7RnrqKttnh94PA/vrzfuAz/X4xMxN4CnjPlXxfkl4vM5PVgzkvn1uoeuqGugq12VD/Q+DOiHgBuLNeJiL2RsTDnZ0i4l+ATwJ3RMTRiHhHvekDwG9FxBGqa+yPbLI8knTVzdahfvr8Aq2EMUNdhdpw+H09mfkScEeX9YeBX121/LYe3/8K8NbNlEGSXmtza3rqI4a6CuUMCpK0gZn6mvrp84u02mlPXcUy1CVpA9snxhgbCU6dX6DVTka8+12FMtQlaQMRwUw9q1yrnYyNGuoqk6EuSX2YndzCqXOLLNlTV8EMdUnqw2z9Upd2ek1d5TLUJakPs5NbOHV+gaVWeve7imWoS1Ifqteveve7ymaoS1IfZiarl7ostX31qsplqEtSH+Ymx1lsJWcuLBrqKpahLkl9mJmsJqA5efY7vqVNxTLUJakPnfnfz1xYsqeuYhnqktSH2anx5c+GukplqEtSH2br4Xcw1FUuQ12S+jC3qqfuI20qlaEuSX2Y3rqFTpY7+YxKZahLUh9GRoLvekM1BG9PXaUy1CWpT52b5bymrlIZ6pLUp85jbYa6SmWoS1KflkPdyWdUKENdkvrUeaxtdMRTp8rkkSlJfVq5pj7ggkg9eGhKUp9Wrql76lSZPDIlqU8rw+8DLojUg4emJPVpZfjdU6fK5JEpSX3y7neVzlCXpD51ht/HRg11lclQl6Q+dYbfR+ypq1CGuiT1aW5ynF/88e/hbXvmB10UqauxQRdAkobFyEjwBz//w4MuhtSTPXVJkhrCUJckqSEMdUmSGsJQlySpIQx1SZIawlCXJKkhDHVJkhrCUJckqSEMdUmSGsJQlySpIQx1SZIawlCXJKkhDHVJkhrCUJckqSEMdUmSGsJQlySpIQx1SZIawlCXJKkhIjMHXYbLFhEngP+9in/kPHDyKv55JbFuw6mpdWtqvcC6Dathqdv3ZuZ1G+00lKF+tUXE4czcO+hyvBas23Bqat2aWi+wbsOqaXVz+F2SpIYw1CVJaghDvfLQoAvwGrJuw6mpdWtqvcC6DatG1c1r6pIkNYQ9dUmSGsJQlySpIa7pUI+IuyLi+Yg4EhH3D7o8mxERN0XEUxHxXET8Z0S8v14/FxFPRsQL9e/ZQZf1SkXEaET8e0Q8US/fEhFP13X7RESMD7qMVyIiZiLi8Yj4ct1+P9GUdouI36yPx2cj4mMRsXVY2y0i/jIijkfEs6vWdW2nqPxZfW55JiJuHVzJN9ajbh+qj8lnIuJvI2Jm1bYH6ro9HxHvGEyp+9Otbqu2/U5EZETM18tD1W7dXLOhHhGjwIeBu4E3Ab8QEW8abKk2ZQn47cz8QeA24Nfq+twPHMrMPcChenlYvR94btXyB4EH67qdAu4bSKk270+Bz2bmDwA/SlXHoW+3iLgR+HVgb2a+GRgF7mV42+1R4K4163q1093AnvrnfcBHXqcyXqlHubRuTwJvzswfAf4beACgPq/cC/xQ/Z0/r8+npXqUS+tGRNwE3An836rVw9Zul7hmQx14K3AkM7+SmQvAx4F9Ay7TFcvMY5n5hfrzWapguJGqTo/Vuz0GvHswJdyciNgN/BzwcL0cwO3A4/UuQ1m3iJgGfgZ4BCAzFzLzNA1pN2AMeENEjAGTwDGGtN0y85+Bl9es7tVO+4C/zsrngJmIuOH1Kenl61a3zPyHzFyqFz8H7K4/7wM+npnfycyvAkeozqdF6tFuAA8Cvwusvlt8qNqtm2s51G8Evr5q+Wi9buhFxM3AW4CngZ2ZeQyq4AeuH1zJNuVPqP4BtuvlHcDpVSedYW2/NwIngL+qLy08HBFTNKDdMvMbwB9R9YSOAa8An6cZ7dbRq52adn75FeDv689DX7eIuAf4RmZ+cc2moa/btRzq0WXd0D/fFxHbgE8Bv5GZZwZdnqshIt4FHM/Mz69e3WXXYWy/MeBW4COZ+RbgHEM41N5NfX15H3AL8N3AFNXw5lrD2G4bacrxSUQcoLq899HOqi67DU3dImISOAD8XrfNXdYNTd3g2g71o8BNq5Z3A98cUFmuiojYQhXoH83MT9erX+wMH9W/jw+qfJvwU8A9EfE1qsskt1P13GfqYV0Y3vY7ChzNzKfr5cepQr4J7fZ24KuZeSIzF4FPAz9JM9qto1c7NeL8EhH7gXcB782VSU2GvW7fR/UfzS/W55TdwBciYhfDX7drOtT/DdhT34k7TnXjx8EBl+mK1deYHwGey8w/XrXpILC//rwf+MzrXbbNyswHMnN3Zt5M1U7/lJnvBZ4C3lPvNqx1+xbw9Yj4/nrVHcB/0YB2oxp2vy0iJuvjs1O3oW+3VXq100Hgl+u7qW8DXukM0w+LiLgL+ABwT2aeX7XpIHBvRExExC1UN5X96yDKeCUy80uZeX1m3lyfU44Ct9b/Foe+3cjMa/YHeCfVXZ3/AxwYdHk2WZefphomegb4j/rnnVTXng8BL9S/5wZd1k3W82eBJ+rPb6Q6mRwBPglMDLp8V1inHwMO1233d8BsU9oN+H3gy8CzwN8AE8PabsDHqO4NWKQKgvt6tRPVMO6H63PLl6ieABh4HS6zbkeori93zid/sWr/A3XdngfuHnT5L7dua7Z/DZgfxnbr9uM0sZIkNcS1PPwuSVKjGOqSJDWEoS5JUkMY6pIkNYShLklSQxjqkiQ1hKEuSVJD/D/VzSFAdKPLXQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Plot the two inputs\n",
    "plt.plot(np.vstack([np.vstack(u), np.zeros((TT-T,1))]))\n",
    "plt.plot(usf.T)\n",
    "plt.legend([\"Optimal\", \"State Feedback\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 700,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12e97fcc0>]"
      ]
     },
     "execution_count": 700,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12ee10128>]"
      ]
     },
     "execution_count": 700,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12da842b0>"
      ]
     },
     "execution_count": 700,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zQPg/vvvp2HDhsyZM4c5c+YAztvfqamprFq1innz5rFq1apTxu3fv59nnnmGmTNnsnz5clJSUvjPf/5T4Wc//PDDx29rr169+rTHlpSUcN999zF16tTjZfzII48AcNtttzFu3DgWLVp0yvkr2uoS4N133yUtLY3U1FTGjRvHgQMHyM7OZsyYMXz++eesXLmSzz777KRzvfbaa3z99ddMnz69SosZvOjKGeBwRBs67vmc0pJifP387Y4jInL+znCFW11+uypdsGABc+bMYdiwYTz77LOMGjXqlLGffvop48ePp7S0lN27d7Nu3Trat29/0pjFixezbt06evXqBUBxcTE9e/as8LOff/55hg4devz7b775psJjN2zYwJo1axgwYADg3JgjNjaW3NxccnJy6Nu3LwAjR47k+++/P36+ira6TElJYdy4cXzxxReA8+p606ZNZGdnc+GFF5KQkABAZGTk8fNMnjyZuLg4pk+fjp+fn+v/cF3kVeXs27A9gXs/Zuuva2jaurPdcUREPJaPjw/9+vWjX79+tGvXjkmTJp1Szlu2bOGFF15g2bJlREREMGrUqAq3eLQsiwEDBvDRRx9VOsfpjl29ejVJSUmnXB3n5OSccfvKira6nDt3LjNnzmTRokUEBwfTr18/CgsLT7unNUBycjLp6elkZWUdL++q5DW3tQGiWjjXE8/eVDUbaoiI1EYbNmxg06ZNx79PT0+nSRPnxkInbguZl5dHSEgI4eHh7N2796Qr1BPH9ejRg59//pnMzEwACgoK2LjRtXUpTndsYmIi2dnZx8u5pKSEtWvXUrduXcLDw1m4cCHAKdtOVrTVZW5uLhEREQQHB5ORkcHixYsB6NmzJ/PmzWPLli0AHDx48Ph5OnXqxFtvvcXgwYPZtWuXS3+WyvCqK+e4lh0otnwp3ZludxQREY+Vn5/PfffdR05ODr6+vrRo0YLx48cDMHbsWAYNGkRsbCxz5syhU6dOJCUl0axZs+O3nisaN3HiRIYPH05RUREAzzzzDK1atTprlpiYmNMeO3XqVO6//35yc3MpLS3lj3/8I0lJSbz33nvHJ4RddtllJ53vt60uMzMzGTFiBCkpKbRr144333yT9u3bk5iYSI8ePY5/9vjx47n22mspLy+nXr16zJgx46RzvfDCC1xxxRXMmDHj+MS5quAVW0ae6NenO1Pg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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Plot the two outputs\n",
    "plt.plot(np.vstack([np.vstack(y), np.zeros((TT-T,1))]))\n",
    "plt.plot(ysf.T)\n",
    "plt.legend([\"Optimal\", \"State Feedback\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 17.3 Linear Quadratic State Estimation\n",
    "\n",
    "\"The code for the linear quadratic estimation method is very similar to the one for linear quadratic control.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 737,
   "metadata": {},
   "outputs": [],
   "source": [
    "ymeas = np.array([[ 1.70778099e+01, -1.83924162e+01,  6.10394456e+00,\n",
    "        -7.97507214e+00,  2.27355721e+00,  2.34308942e+01,\n",
    "         3.39867360e+01,  4.24050167e+01,  2.05731680e+01,\n",
    "         4.94395071e+01,  3.45442498e+01,  7.88341002e+01,\n",
    "         8.67009078e+01,  7.22735074e+01,  2.31850194e+01,\n",
    "         1.25784108e+02,  1.11441506e+02,  1.34603580e+02,\n",
    "         9.08335516e+01,  1.39211826e+02,  1.82597858e+02,\n",
    "         1.55620959e+02,  1.35394535e+02,  1.71816643e+02,\n",
    "         1.79738746e+02,  2.62311327e+02,  1.65873945e+02,\n",
    "         1.56867751e+02,  2.23467712e+02,  2.53129175e+02,\n",
    "         2.03679219e+02,  2.20062198e+02,  2.81625929e+02,\n",
    "         2.38298096e+02,  3.01005533e+02,  2.74101690e+02,\n",
    "         2.41510019e+02,  2.48551509e+02,  2.25600934e+02,\n",
    "         1.54680964e+02,  1.98224063e+02,  2.03866603e+02,\n",
    "         2.08089219e+02,  2.08244771e+02,  1.69046465e+02,\n",
    "         1.74862089e+02,  1.93984500e+02,  1.61771170e+02,\n",
    "         1.44928387e+02,  1.07953687e+02,  1.42606362e+02,\n",
    "         1.01143225e+02,  1.93119878e+02,  4.86121107e+01,\n",
    "         1.40429785e+02,  1.16747984e+02,  7.20067571e+01,\n",
    "         3.33845460e+01,  1.73703911e+00,  4.13324794e+01,\n",
    "         5.10008943e+01,  7.78212231e+01,  9.73475231e+01,\n",
    "         7.20156638e+00,  4.18824911e+01,  3.73829417e+01,\n",
    "         1.17537300e+01,  6.50543261e+01,  7.01591558e+00,\n",
    "         3.89538168e+01,  1.04449893e+02,  6.21834962e+01,\n",
    "         9.85315111e+01,  5.14442316e+01,  4.75120937e+01,\n",
    "         6.13570702e+01,  5.97455584e+01,  4.39494903e+01,\n",
    "         8.26649843e+01,  6.08501125e+01,  1.07528400e+02,\n",
    "         1.62298903e+02,  1.60557305e+02,  1.40797792e+02,\n",
    "         1.39902849e+02,  1.17845958e+02,  2.00958386e+02,\n",
    "         2.02880814e+02,  1.76931913e+02,  1.65895483e+02,\n",
    "         2.01597849e+02,  1.98339869e+02,  2.17976883e+02,\n",
    "         2.61641268e+02,  2.04828587e+02,  2.84764612e+02,\n",
    "         2.22338022e+02,  2.95402558e+02,  2.60828319e+02,\n",
    "         2.24987351e+02],\n",
    "       [ 1.63811511e+01, -1.02102123e+00, -2.62172723e+00,\n",
    "         1.70421017e+01, -8.77394913e+00, -5.20869630e+01,\n",
    "        -1.60324186e+01, -4.24246849e+01, -4.91794661e+01,\n",
    "        -3.06611440e+01, -1.52727993e+01, -8.11660285e+01,\n",
    "        -1.16511615e+02, -1.41130660e+01, -4.61581740e+01,\n",
    "        -7.50780171e+01, -1.18182293e+02, -1.29205129e+02,\n",
    "        -1.64972334e+02, -1.02577288e+02, -1.22567633e+02,\n",
    "        -1.81248284e+02, -1.27278951e+02, -2.04119652e+02,\n",
    "        -2.27687535e+02, -2.51393552e+02, -2.74520269e+02,\n",
    "        -2.66083141e+02, -3.11282088e+02, -3.05291240e+02,\n",
    "        -3.87589339e+02, -4.13509577e+02, -3.79896889e+02,\n",
    "        -4.66118373e+02, -4.44740533e+02, -4.57258956e+02,\n",
    "        -4.92460236e+02, -4.94789750e+02, -5.42765233e+02,\n",
    "        -5.26015331e+02, -5.90580789e+02, -6.21374263e+02,\n",
    "        -6.17038815e+02, -6.21125522e+02, -6.39106527e+02,\n",
    "        -6.94088028e+02, -7.14041092e+02, -7.35457565e+02,\n",
    "        -7.26167922e+02, -7.74166470e+02, -8.35004328e+02,\n",
    "        -8.56688388e+02, -8.68452776e+02, -9.07279418e+02,\n",
    "        -8.85158459e+02, -9.42174345e+02, -9.96411241e+02,\n",
    "        -9.31762579e+02, -1.01901698e+03, -1.09368046e+03,\n",
    "        -9.92186943e+02, -1.10887128e+03, -1.11942878e+03,\n",
    "        -1.18326208e+03, -1.18145562e+03, -1.14747530e+03,\n",
    "        -1.19375816e+03, -1.22016814e+03, -1.22906150e+03,\n",
    "        -1.28998644e+03, -1.24880527e+03, -1.30671968e+03,\n",
    "        -1.36047927e+03, -1.39128750e+03, -1.37220909e+03,\n",
    "        -1.39419928e+03, -1.44482396e+03, -1.47010103e+03,\n",
    "        -1.42228170e+03, -1.44700843e+03, -1.49317030e+03,\n",
    "        -1.55328302e+03, -1.47098557e+03, -1.54946659e+03,\n",
    "        -1.55488173e+03, -1.54173960e+03, -1.56711254e+03,\n",
    "        -1.59185254e+03, -1.56509343e+03, -1.60766101e+03,\n",
    "        -1.65272075e+03, -1.65834577e+03, -1.56199411e+03,\n",
    "        -1.64068671e+03, -1.62112540e+03, -1.63171892e+03,\n",
    "        -1.66863768e+03, -1.63170753e+03, -1.65546697e+03,\n",
    "        -1.64358222e+03]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 771,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cls_solve(A,b,C,d):\n",
    "    m,n = np.shape(A)\n",
    "    p,n = np.shape(C)\n",
    "    Q,R = npl.qr(np.vstack([A,C]))\n",
    "    Q1 = Q[0:m,:]\n",
    "    Q2 = Q[m:m+p,:]\n",
    "    Qtil, Rtil = npl.qr(Q2.T)\n",
    "    first = np.vstack(np.matmul(np.matmul(2*Qtil.T , Q1.T),b)) #splitting line below for readability\n",
    "    denom = first - np.vstack((2*(npl.lstsq(Rtil.T,d)[0]))) #splitting line below for readability\n",
    "    w = npl.lstsq(Rtil, denom)[0]\n",
    "    return npl.lstsq(R,np.vstack(np.matmul(Q1.T,b)) - np.matmul(Q2.T , w)/2)[0]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 912,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lqe(A,B,C, y, T, lambd):\n",
    "    n = np.shape(A)[0]\n",
    "    m = np.shape(B)[1]\n",
    "    p = np.shape(C)[0]\n",
    "    q = np.shape(y)[1]\n",
    "    Atil = np.vstack([np.hstack([np.kron(np.eye(T),C), np.zeros((T*p,m*(T-1)))])\n",
    "                      ,np.hstack([np.zeros((m*(T-1),n*T)), np.sqrt(lambd)*np.eye(m*(T-1))])])\n",
    "    #We assume y is a p x T array, so we vectorize it\n",
    "    btil = np.vstack([np.vstack(ymeas.T.ravel()),np.zeros(((T-1)*m,1))])\n",
    "    Ctila = np.hstack([np.kron(np.eye(T-1),A), np.zeros(((n*(T-1),n)))])\n",
    "    Ctilb = np.hstack([np.zeros(((n*(T-1),n))), -np.eye(n*(T-1))])\n",
    "    Ctil = np.hstack([Ctila + Ctilb,np.kron(np.eye(T-1),B)])\n",
    "    dtil = np.zeros((n*(T-1),1))\n",
    "    z = cls_solve(Atil, btil, Ctil, dtil)\n",
    "    \n",
    "    x = np.vstack([np.hstack(z[(i-1)*n : i*n,:]) for i in range(1,T+1)])\n",
    "    u = np.vstack([z[n*T+(i)*m : n*T+i+1*m, :] for i in range(0,T-1)])\n",
    "    y = np.vstack([np.matmul(C,xt) for xt in x])\n",
    "    return x,u,y\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 917,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  if __name__ == '__main__':\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n",
      "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:11: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n",
      "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n",
      "  # This is added back by InteractiveShellApp.init_path()\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x12dc07e80>"
      ]
     },
     "execution_count": 917,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12da09f28>]"
      ]
     },
     "execution_count": 917,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "A = np.vstack([np.hstack([np.eye(2),np.eye(2)]),np.hstack([np.zeros((2,2)), np.eye(2)])])\n",
    "B = np.vstack([np.zeros((2,2)), np.eye(2)])\n",
    "C = np.hstack([np.eye(2), np.zeros((2,2))])\n",
    "n = np.shape(A)[0]\n",
    "m = np.shape(B)[1]\n",
    "p = np.shape(C)[0]\n",
    "T = 100\n",
    "lambd = 1e3\n",
    "xest, uest, yest = lqe(A,B,C,ymeas,T,lambd)\n",
    "plt.scatter(ymeas[0,:], ymeas[1,:])\n",
    "plt.plot([yt[0] for yt in yest], [yt[1] for yt in yest], \"orange\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Figure 17.6** The circles show 100 noisy measurements in 2-D. The solid line is the estimated trajectory $C\\hat{x}_{t}$ for $\\lambda = 1000$"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
